package io.itit.ecp.admin.provide.action.resp;


import com.alibaba.fastjson.JSON;
import io.itit.ecp.admin.common.enums.IPhysicalModelModelFutureEnums;
import io.itit.ecp.admin.provide.selected.PhysicalModelModelDataTypeSelected;
import io.itit.ecp.admin.provide.selected.PhysicalModelModelFieldTypeSelected;
import io.itit.ecp.admin.provide.selected.PhysicalModelModelTypeSelected;
import io.itit.grass.common.provide.action.resp.BaseResp;
import io.itit.grass.dict.starter.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.commons.lang3.StringUtils;

import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;

@Data
@ApiModel("物模型管理响应结果")
@EqualsAndHashCode(callSuper = true)
public class PhysicalModelResp extends BaseResp {

    /**
     * 模型名称
     */
    @ApiModelProperty("模型名称")
    private String modelName;

    /**
     * 模型标识
     */
    @ApiModelProperty("模型标识")
    private String modelTag;

    /**
     * 模型类别 (1:属性，2:功能，3:事件)
     */
    @ApiModelProperty("模型类别 (1:属性，2:功能，3:事件)")
    @Dict(isBean = true, dictCode = PhysicalModelModelTypeSelected.CODE)
    private String modelType;

    /**
     * 模型特性（可多 选, 1:实时监测、2:只读数据、3:历史存储、4:计量参数）
     */
    @ApiModelProperty("模型特性（可多 选, 1:实时监测、2:只读数据、3:历史存储、4:计量参数）")
    private String modelFeatures;

    /**
     * 数据类型(1:整数,2:小数, 3:布尔,4:枚举,5:字符串,6:数组,7:对象)
     */
    @ApiModelProperty("数据类型(1:整数,2:小数, 3:布尔,4:枚举,5:字符串,6:数组,7:对象)")
    @Dict(isBean = true, dictCode = PhysicalModelModelFieldTypeSelected.CODE)
    private String fieldType;

    /**
     * 数据类型(1:动态数据,2:静态数据)
     */
    @ApiModelProperty("数据类型(1:动态数据,2:静态数据)")
    @Dict(isBean = true, dictCode = PhysicalModelModelDataTypeSelected.CODE)
    private String dataType;

    @ApiModelProperty("数据值")
    private Object newValue;

    /**
     * 不同数据类型对应的配置参数
     */
    @ApiModelProperty("不同数据类型对应的配置参数")
    private String dataExt;

    public String getModelFeaturesName() {
        if (StringUtils.isNotEmpty(modelFeatures)) {
            String[] array = modelFeatures.split(",");
            return Arrays.stream(array).map(item -> Arrays.stream(IPhysicalModelModelFutureEnums.values())
                            .filter(f -> f.getValue().equals(item)).findFirst()
                            .map(IPhysicalModelModelFutureEnums::getLabel).orElse(""))
                    .collect(Collectors.joining(","));
        }
        return null;
    }


    public Map<String, Object> getDataExtMap() {
        if (StringUtils.isEmpty(this.dataExt)) {
            return null;
        }
        return JSON.parseObject(this.dataExt);
    }
}
